/*
 * @Author: your name
 * @Date: 2021-06-22 10:50:32
 * @LastEditTime: 2021-06-22 15:14:12
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \rpcMsg\rpcinterface\interface\msg\msg.go
 */
package msg

import (
	"context"

	"git.900sui.cn/kc/rpcinterface/interface/common"
)

const (
	//消息类型
	MSG_TYPE_1 = 1 //系统消息
	MSG_TYPE_2 = 2 //商户消息


	//状态
	MSG_STATUS_1 = 1 //未读
	MSG_STATUS_2 = 2 //已读

	MSG_SOURCE_1=1 //优惠券到期提醒
	MSG_SOURCE_2=2 //订单支付
	MSG_SOURCE_3=3 //单项目确认消费
	MSG_SOURCE_4=4 //套餐确认消费
	MSG_SOURCE_5=5 //综合卡确认消费
	MSG_SOURCE_6=6 //限时卡确认消费
	MSG_SOURCE_7=7 //限次卡确认消费
	MSG_SOURCE_8=8 //限时限次卡确认消费
	MSG_SOURCE_9=9 //充值卡确认消费
	MSG_SOURCE_10=10 //商户自定义
)

//推送商户自定义消息
type PushCustomMsgArgs struct {
	common.BsToken
	Title   string `length:"200" must:"Y"`
	Content string `must:"Y"`
	Uid     []int  `must:"Y"`
}

//推送系统自定义消息
type PushSystemMsgArgs struct {
	common.BsToken
	BsId int `length:"255"` //商户id
	Source  int    `length:"2" must:"Y"` //1-订单支付，2-优惠券到期，3-单项目消费确认，4-套餐，5-综合卡，6-限时卡，7-限次卡，8-限时限次卡，9-充值卡
	OrderId string `length:"255"` //订单号
	Time string 	`length:"255"` //日期
	Title   string `length:"255"` //名称
	ShopName string `length:"255"` //门店名称
	Price string `length:"255"` //消费金额
	Uid     int    `must:"Y"` //用户id
	Num string `length:"255"` //数量
}

//用户-获取消息类型列表

type MsgTypeArgs struct {
	common.Utoken
}

type MsgTypeReply struct {
	Id         int
	Name       string
	IsNewMsg   int //是否有新消息，0-无，1-有
	NewMsgTime int //最新消息时间
}

//用户-获取消息列表
type MsgListByUserArgs struct {
	common.Utoken
	TypeId int `length:"2" must:"Y"` //类型id
	Status int `length:"2" must:"Y"` //状态 0-全部，1-未读，2-已读
	common.Paging
}
type MsgListByUserReplyList struct {
	TotalNum int
	Lists    []MsgListByUserReply
}

type MsgListByUserReply struct {
	Id         int
	TypeId     int
	Source     int
	Status     int
	Title      string
	Content    string
	BusId      int
	BusImgUrl  string
	BusName    string
	CreateTime string
}

//用户-获取消息详情
type MsgInfoByIdArgs struct {
	common.Utoken
	MsgId int `length:"11" must:"Y"` //消息id
}

type MsgInfoByIdReply struct {
	Id         int
	Sign       string
	Title      string
	Content    string
	CreateTime int
}

//更新消息状态
type UpdateMsgReadedStatusArgs struct {
	common.Utoken
	MsgId int //消息id
}

type Msg interface {
	//推送商户自定义消息
	PushCustomMsg(ctx context.Context, args *PushCustomMsgArgs, reply *bool) error
	//推送系统自定义消息
	PushSystemMsg(ctx context.Context, args *PushSystemMsgArgs, reply *bool) error
	//用户-获取消息类型列表
	GetMsgTypes(ctx context.Context, args *MsgTypeArgs, reply *[]MsgTypeReply) error
	//用户-获取消息列表
	GetMsgListByUser(ctx context.Context, args *MsgListByUserArgs, reply *MsgListByUserReplyList) error
	//用户-获取消息详情
	FindMsgInfoById(ctx context.Context, args *MsgInfoByIdArgs, reply *MsgInfoByIdReply) error
	//更新消息状态
	UpdateMsgReadedStatusByUser(ctx context.Context, args *UpdateMsgReadedStatusArgs, reply *bool) error
}
